package com.liruo.enumconverter.nogeneric.deserialize;

import com.liruo.enumconverter.model.SourceEnum;
import org.springframework.core.convert.converter.Converter;

import java.util.HashMap;
import java.util.Map;

/**
 * @Author:liruo
 * @Date:2023-02-19-13:46:59
 * @Desc
 * 注意传参是class要对应Converter的第二个泛型，这个实在没办法用泛型规范
 * 必须指定什么类型由什么类型来转换 即不能泛型化--参数化
 */
public class SourceToEnumConverter<S, T extends SourceEnum<S>> implements Converter<S, T> {
    private final Map<S, T> cache;

    public SourceToEnumConverter(Class<T> enumClazz) {
        T[] enumConstants = enumClazz.getEnumConstants();
        cache = new HashMap<>(enumConstants.length);
        for (T enumeration : enumClazz.getEnumConstants()){
            cache.put(enumeration.source(), enumeration);
        }
    }
    @Override
    public T convert(S source) {
        return cache.get(source);
    }

}
